﻿using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using Equation.Enterprise.Framework.ApplicationServices;

namespace ENail.Domain.Core.Contract.Services
{
    public interface INailServiceService : IApplicationService
    {
        /// <summary>
        /// Helps view all nail services on list view
        /// </summary>
        /// <returns>List of all nail services</returns>
        IList<NailService> GetAllNailServices();

        /// <summary>
        /// Helps view nail services for search view
        /// </summary>
        /// <param name="where">Lambda condition to get nail services</param>
        /// <returns></returns>
        IList<NailService> GetNailServices(Expression<Func<NailService, bool>> where);

        /// <summary>
        /// Helps view active nail services only
        /// </summary>
        /// <returns>All active nail services</returns>
        IList<NailService> GetAllActiveNailServices();

        ///// <summary>
        ///// Filter nail services by name among active ones.
        ///// </summary>
        ///// <param name="filter">The filtered name</param>
        ///// <returns></returns>
        //IEnumerable<NailService> FilterActiveNailServicesByName(string filter);

        /// <summary>
        /// Helps view details of an nail service
        /// </summary>
        /// <param name="id">Identity of nail service</param>
        /// <returns>NailService with specified identity</returns>
        NailService GetNailService(int id);

        /// <summary>
        /// Insert an nail service from view
        /// </summary>
        /// <param name="nail service">nailService to be inserted</param>
        /// <returns>Number of records affected</returns>
        int InsertNailService(NailService nailService);

        /// <summary>
        /// Update an nail service from view
        /// </summary>
        /// <param name="nail service">nailService to be updated</param>
        /// <returns>Number of records affected</returns>
        int UpdateNailService(NailService nailService);

        /// <summary>
        /// Helps to inactive an nail service
        /// </summary>
        /// <param name="nail service">nailService to be inactive</param>
        /// <returns>Number of records affected</returns>
        int DeActivateNailService(NailService nailService);
    }
}
